//#define  _CRT_SECURE_NO_WARNINGS
//#include <iostream>
//#include <vector>
//#include <queue>
//using namespace std;
//vector<vector<char>> board;
//vector<vector<bool>> vis;
//int m, n;
//int start_x = 0, start_y = 0, end_x = 0, end_y = 0;
//int dx[4] = { 0, 0, 1, -1 };
//int dy[4] = { 1, -1, 0, 0 };
////bool dfs(int i, int j)
////{
////	for (int k = 0; k < 4; k++)
////	{
////		int x = i + dx[k], y = j + dy[k];
////		if (x >= 0 && x < m && y >= 0 && y < n && !vis[x][y] && (board[x][y] == '.' || board[x][y] == 'E'))
////		{
////			vis[x][y] = true;
////			if (x == end_x && y == end_y)
////				return true;
////			if (dfs(x, y)) return true;
////			vis[x][y] = false;
////		}
////	}
////	return false;
////}
//
//bool bfs(int i, int j)
//{
//	queue<pair<int, int>> q;
//	q.push({ i, j });
//	while (q.size())
//	{
//		int sz = q.size();
//		while (sz--)
//		{
//			auto e = q.front(); q.pop();
//			for (int k = 0; k < 4; k++)
//			{
//				int x = e.first + dx[k], y = e.second + dy[k];
//				if (x >= 0 && x < m && y >= 0 && y < n && !vis[x][y] && board[x][y] != '#')
//				{
//					vis[x][y] = true;
//					if (x == end_x && y == end_y)
//						return true;
//					q.push({ x, y });
//				}
//			}
//
//		}
//	}
//	return false;
//}
//
//int main()
//{
//	while (cin >> m >> n)
//	{
//		board.resize(m, vector<char>(n));
//		vis.assign(m, vector<bool>(n));
//		
//		for (int i = 0; i < m; i++)
//		{
//			for (int j = 0; j < n; j++)
//			{
//				cin >> board[i][j];
//				if (board[i][j] == 'S')
//					start_x = i, start_y = j;
//				if (board[i][j] == 'E')
//					end_x = i, end_y = j;
//			}
//		}
//		vis[start_x][start_y] = true;
//		if (bfs(start_x, start_y)) cout << "Yes" << endl;
//
//		else cout << "No" << endl;
//	}
//	return 0;
//}
//
//
//
